// src/main/java/com/example/springaiollamademodemo/ChatMemoryConfig.java
package com.example.springaiollamademodemo; // 请替换为你的实际项目包名

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor;
import org.springframework.ai.chat.memory.ChatMemory;
import org.springframework.ai.chat.memory.InMemoryChatMemory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration // 这是一个配置类
public class ChatMemoryConfig {

    /**
     * 定义一个 InMemoryChatMemory Bean。
     * 这是对话历史的存储介质，默认将历史存储在内存中。
     * @return InMemoryChatMemory 实例
     */
    @Bean
    public ChatMemory chatMemory() {
        return new InMemoryChatMemory();
    }

    /**
     * 定义一个带有记忆功能的 ChatClient。
     * 通过 ChatClient.Builder 添加 MessageChatMemoryAdvisor 来实现记忆功能。
     * 给这个 Bean 一个特定的名称 "chatClientWithMemory"，以免与默认的 ChatClient 冲突。
     *
     * @param chatClientBuilder Spring AI 自动配置的 ChatClient.Builder
     * @param chatMemory 我们上面定义的 ChatMemory 实例
     * @return 带有记忆功能的 ChatClient
     */
    @Bean("chatClientWithMemory")
    public ChatClient chatClientWithMemory(ChatClient.Builder chatClientBuilder, ChatMemory chatMemory) {
        // MessageChatMemoryAdvisor 的构造函数在 1.0.0-M5 版本中只接受 ChatMemory
        return chatClientBuilder
                .defaultAdvisors(new MessageChatMemoryAdvisor(chatMemory)) // 添加记忆顾问
                .build();
    }
}